#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
文件工具模块

提供文件操作相关的辅助功能
"""

import os
import re
import shutil
from pathlib import Path

def ensure_dir(directory):
    """确保目录存在，不存在则创建
    
    参数:
        directory (str): 目录路径
        
    返回:
        bool: 操作成功返回True
    """
    try:
        Path(directory).mkdir(parents=True, exist_ok=True)
        return True
    except Exception as e:
        return False

def get_safe_filename(original_name):
    """生成安全的文件名，移除不合法字符
    
    参数:
        original_name (str): 原始文件名
        
    返回:
        str: 安全的文件名
    """
    # 替换Windows文件名非法字符 (\ / : * ? " < > |)
    safe_name = re.sub(r'[\\/:*?"<>|]', '_', original_name)
    
    # 移除前导和尾随空格
    safe_name = safe_name.strip()
    
    # 如果文件名为空，使用默认名称
    if not safe_name:
        safe_name = "unnamed"
        
    return safe_name

def get_file_extension(format_str):
    """获取格式对应的文件扩展名
    
    参数:
        format_str (str): 格式字符串，如"PNG"、"JPEG"
        
    返回:
        str: 文件扩展名，如".png"、".jpg"
    """
    format_map = {
        "PNG": ".png",
        "JPEG": ".jpg",
        "JPG": ".jpg",
        "BMP": ".bmp",
        "TIFF": ".tiff",
        "GIF": ".gif"
    }
    
    return format_map.get(format_str.upper(), ".png")

def get_format_from_extension(filename):
    """从文件名获取格式
    
    参数:
        filename (str): 文件名
        
    返回:
        str: 对应的格式字符串，如"PNG"、"JPEG"
    """
    ext = os.path.splitext(filename)[1].lower()
    
    ext_map = {
        ".png": "PNG",
        ".jpg": "JPEG",
        ".jpeg": "JPEG",
        ".bmp": "BMP",
        ".tiff": "TIFF",
        ".tif": "TIFF",
        ".gif": "GIF"
    }
    
    return ext_map.get(ext, "PNG")

def batch_process_files(file_list, process_func, **kwargs):
    """批量处理文件
    
    参数:
        file_list (list): 文件路径列表
        process_func (callable): 处理函数
        **kwargs: 传递给处理函数的额外参数
        
    返回:
        dict: 处理结果字典，键为文件路径，值为结果
    """
    results = {}
    
    for file_path in file_list:
        try:
            result = process_func(file_path, **kwargs)
            results[file_path] = result
        except Exception as e:
            print(f"处理文件 {file_path} 时出错: {str(e)}")
            results[file_path] = None
            
    return results

def create_directory(path):
    """创建目录，如果目录不存在
    
    参数:
        path (str): 目录路径
        
    返回:
        bool: 创建成功返回True，否则返回False
    """
    try:
        if not os.path.exists(path):
            os.makedirs(path, exist_ok=True)
        return True
    except Exception as e:
        return False

def process_file(file_path, process_func, *args, **kwargs):
    """处理文件的通用函数
    
    参数:
        file_path (str): 文件路径
        process_func (callable): 处理函数
        *args: 传递给处理函数的位置参数
        **kwargs: 传递给处理函数的关键字参数
        
    返回:
        处理函数的返回值，如果处理失败则返回None
    """
    try:
        return process_func(file_path, *args, **kwargs)
    except Exception as e:
        return None 